home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / UNIXLIB37B / src / sys / s / _alloca next >
Text File  |  1992-02-17  |  932b  |  73 lines

  1. ;    /* _alloca.s (c) Copyright 1991 H.Rogers */
  2.  
  3. a1 RN 0
  4. a2 RN 1
  5. a3 RN 2
  6. a4 RN 3
  7. v1 RN 4
  8. v2 RN 5
  9. v3 RN 6
  10. v4 RN 7
  11. v5 RN 8
  12. v6 RN 9
  13. sl RN 10
  14. fp RN 11
  15. ip RN 12
  16. sp RN 13
  17. lr RN 14
  18. pc RN 15
  19.  
  20.     AREA    |C$$code|,CODE,READONLY
  21.  
  22.     IMPORT    malloc
  23.     IMPORT    free
  24.  
  25.     EXPORT    alloca
  26. alloca
  27.     CMP    a1,#0
  28.     MOVEQS    pc,lr
  29.  
  30.     ADD    a1,a1,#8
  31.     STMFD    sp!,{lr}
  32.     BL    malloc
  33.     CMP    a1,#0
  34.     CMPNE    fp,#0
  35.     LDMEQFD sp!,{pc}^
  36.  
  37.     LDR    a2,[fp,#-4]
  38.     LDR    a3,[pc,#|__alloca_list_ptr|-.-8]
  39.     LDR    a4,[a3,#0]
  40.     STR    a4,[a1,#0]
  41.     STR    a2,[a1,#4]
  42.     STR    a1,[a3,#0]
  43.     AND    a2,a2,#&fc000003
  44.     ADR    a3,|__alloca_free|
  45.     BIC    a3,a3,#&fc000003
  46.     ORR    a2,a2,a3
  47.     STR    a2,[fp,#-4]
  48.     ADD    a1,a1,#8
  49.     LDMFD    sp!,{pc}^
  50.  
  51. |__alloca_free|
  52.     STMFD    sp!,{a1,a2,v1}
  53.     LDR    a3,[pc,#|__alloca_list_ptr|-.-8]
  54.     LDR    a1,[a3,#0]
  55.     LDR    a4,[a1,#0]
  56.     LDR    v1,[a1,#4]
  57.     STR    a4,[a3,#0]
  58.     BL    free
  59.     MOV    a3,v1
  60.     LDMFD    sp!,{a1,a2,v1}
  61.     MOVS    pc,a3
  62.  
  63. |__alloca_list_ptr|
  64.     DCD    |__alloca_list|
  65.  
  66.     AREA    |C$$data|
  67.  
  68.     EXPORT    |__alloca_list|
  69. |__alloca_list|
  70.     DCD    0
  71.  
  72.     END
  73.